# # 字符串基础操作题
# # 假设有一个初始字符串 `s = "Hello, Python world!"`，进行下面的操作：
# s = "Hello, Python world!"
# print(s,type(s))
# #  1. 字符串长度计算
# print(len(s))
# #  2. 计算字符串中"o"字符的个数
# print(f"字符o出现的个数为：{s.count('o')}")
# #  3. 将字符串转换为大写
# print(s.upper())
# #  4. 将字符串转换为小写
# print(s.lower())
# #  5. 查找"Python"在字符串中的位置
# print("Python 的位置:", s.find("Python"))
# # 6. 替换字符串中的 "world" 为 "universe"
# print("替换'world'为'universe':", s.replace("world", "universe"))
# # 7. 检查字符串是否以 "Hello" 开始
# print("是否以 'Hello' 开始:", s.startswith("Hello"))
# # 8. 检查字符串是否以 "!" 结尾
# print("是否以 '!' 结尾:", s.endswith("!"))
# # 9. 以 "," 为分隔符，拆分字符串
# print("以 ',' 分隔:", s.split(','))
# # 10. 去除字符串首尾的 "!"
# print("去除首尾 '!':", s.strip("!"))
# # 11. 字符串反转
# print("字符串反转:", s[::-1])
# # 12. 字符串切片，获取 "Python"
# print("切片获取 'Python':", s[7:13])
# # 13. 将字符串 s 中的 "Hello," 删除
# print("删除 'Hello,':", s.replace("Hello,", ""))
# # 14. 拼接两个字符串 "Hello," 和 "World!"
# print("拼接字符串:", "Hello," + " World!")
# # 15. 使用 f-string 合并字符串和数字 2021
# print(f"合并字符串和数字: {s} in 2021")
# # 16. 找出 'a' 第一次出现的位置
# print("字符 'a' 第一次出现的位置:", s.find('a'))
# # 17. 找出 'e' 最后一次出现的位置
# print("字符 'e' 最后一次出现的位置:", s.rfind('e'))
# # 18. 计算字符串中空格的数量
# print("空格的数量:", s.count(" "))
# # 19. 使用循环遍历字符串中的每个字符
# print("遍历字符串中的每个字符:")
# for char in s:
#     print(char, end=" ")
# print()
# # 20. 将字符串转为 "列表" 形式，每个字符为一个列表元素
# print("字符串转为列表:", list(s))
# # 21. 字符串排序（提示：先转换为列表）
# print("字符串排序:", ''.join(sorted(s)))
# # 22. 判断字符串是否为数字
# print("是否为数字:", s.isdigit())
# # 23. 将列表 ['Hello,', 'Python', 'World!'] 使用空格连接为一个字符串
# lst = ['Hello,', 'Python', 'World!']
# print("列表连接为字符串:", ' '.join(lst))
# # 24. 使用 % 操作符格式化字符串，将数字 100 插入到 "Number: " 后面
# print("格式化字符串: Number: %d" % 100)
# # 25. 检查字符串是否全部为小写字母
# print("是否全部为小写字母:", s.islower())
# # 26. 检查字符串是否全部为大写字母
# print("是否全部为大写字母:", s.isupper())
# # 27. 将数字列表 [1, 2, 3] 转换成字符串，元素之间用 '-' 连接
# numbers = [1, 2, 3]
# print("数字列表转字符串:", '-'.join(map(str, numbers)))
# # 28. 找出字符串中所有的 "o" 的位置
# print("所有 'o' 的位置:", [index for index, char in enumerate(s) if char == 'o'])
# # 29. 替换字符串中的第一个 "o" 为 "O"
# print("替换第一个 'o' 为 'O':", s.replace("o", "O", 1))
# # 30. 字符串插入操作，向字符串指定位置插入子字符串 "amazing "
# print("在第 7 个位置插入 'amazing ':", s[:7] + "amazing " + s[7:])


# 给定字符串
s = "Python is great!"
s2 = "A man, a plan, a canal, Panama!"
s3 = "encryption"

# 任务 1：字符串反转（不使用内置函数）
reversed_s = ""
for char in s:
    reversed_s = char + reversed_s
print("1. 反转后的字符串:", reversed_s)

# 任务 2：字符计数（计算字符 't' 的出现次数）
count_t = 0
for char in s:
    if char == 't':
        count_t += 1
print("2. 字符 't' 出现的次数:", count_t)

# 任务 3：替换字符（将空格替换为下划线 '_'）
s_with_underscores = s.replace(" ", "_")
print("3. 替换空格后的字符串:", s_with_underscores)

# 任务 4：检查回文（忽略大小写、标点和空格）
import re

cleaned_s2 = re.sub(r'[^a-zA-Z]', '', s2).lower()
is_palindrome = cleaned_s2 == cleaned_s2[::-1]
print("4. 是否为回文字符串:", is_palindrome)

# 任务 5：子字符串查找（查找 "is" 的位置）
position = s.find("is")
print("5. 子字符串 'is' 的位置:", position)

# 任务 6：字符串插入（在第一个 't' 后插入 "_inserted"）
index = s.find('t')
s_inserted = s[:index + 1] + "_inserted" + s[index + 1:]
print("6. 插入后的字符串:", s_inserted)

# 任务 7：部分替换（替换第一次出现的 "great" 为 "awesome"）
s_replaced = s.replace("great", "awesome", 1)
print("7. 替换后的字符串:", s_replaced)

# 任务 8：切片与拼接（将字符串切分为两部分并反转拼接）
mid = len(s) // 2
first_half = s[:mid]
second_half = s[mid:]
s_swapped = second_half + first_half
print("8. 反转拼接后的字符串:", s_swapped)

# 任务 9：创建字符串列表（每个单词首字母大写）
words = s.split()
capitalized_words = [word.capitalize() for word in words]
print("9. 首字母大写的单词列表:", capitalized_words)

# 任务 10：字符替换加密
def encrypt(text):
    shift = 13  # ROT13 加密规则
    encrypted_text = ""
    for char in text:
        if char.isalpha():
            offset = 65 if char.isupper() else 97
            encrypted_char = chr((ord(char) - offset + shift) % 26 + offset)
            encrypted_text += encrypted_char
        else:
            encrypted_text += char
    return encrypted_text

encrypted_s3 = encrypt(s3)
print("10. 加密后的字符串:", encrypted_s3)
